(function (modules) {
    function require(id) {
        const [fn, mapping] = modules[id] //路径映射到函数

        //这里是构建一个暴露语法 
        const module = {
            exports: {},
        }

        function localRequire(filePath) {
            const id = mapping[filePath]
            return require(id)
        }
        //fn为未知数 module(暴露函数集合)和module.exports(暴露单个函数)用于两种暴露的声明模式
        fn(localRequire, module, module.exports) //递归遍历依赖函数

        return module.exports
    }

    require(1);
})({

    "./main.js": function (require, module, exports) {
        const { foo } = require('./foo.js')
        foo()
        console.log("main.js");
    },
    "./foo.js": function (require, module, exports) {
        function foo() {
            console.log("foo.js");
        }

        module.exports = {
            foo,
        }
    },
})


